home *** CD-ROM | disk | FTP | other *** search
- #define SystemSevenOrLater 1
-
- #include <Events.h>
- #include <Resources.h>
- #include <Memory.h>
- #include <Devices.h>
- #include <Dialogs.h>
- #include <OSUtils.h>
- #include <ToolUtils.h>
- #include <Gestalt.h>
-
- #include "RSO.h"
-
- // dialog items for our control panel:
-
- enum {
- kJivingOn = 1,
- kJivingOff = 2,
- kJivText = 3
- };
-
- JiverGlobals *gInitGlobals, **gPrefsResource;
-
- ControlHandle gOnButton, gOffButton;
- Handle gTextBox;
-
- #ifdef powerc
- // for Metrowerks' linker, this defines the mixed-mode interface for main().
- ProcInfoType __procinfo = kPascalStackBased
- | RESULT_SIZE(kFourByteCode)
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(EventRecord *)))
- | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(DialogPtr)));
-
- #endif
-
- pascal long main(short message, short Item, short numItems, short CPanelID,
- EventRecord *theEvent, register long cdevValue, DialogPtr CPDialog)
- {
- long oldA4;
- OSErr err;
- short kind;
- Rect r;
- Str255 text;
- SelectorFunctionUPP ourGestaltUPP;
- long versionCheck;
-
- oldA4 = SetCurrentA4();
-
- if (message == initDev) {
- gPrefsResource = (JiverGlobals **)Get1Resource('pref', -4048);
- if (!gPrefsResource) {
- // if we can't load our preferences resource, something is seriously wrong.
- bad_problem:
- cdevValue = cdevGenErr;
- } else {
- HNoPurge((Handle) gPrefsResource);
-
- // make sure that our prefs resource is the correct size.
- SetHandleSize((Handle) gPrefsResource, sizeof(JiverGlobals));
- if (GetHandleSize((Handle) gPrefsResource) != sizeof(JiverGlobals)) goto bad_problem;
-
- err = Gestalt(kDTS_Signature, (long *)&ourGestaltUPP);
- if (err == noErr) {
- err = CallSelectorFunctionProc(ourGestaltUPP, gestaltVersion, (long *)&versionCheck);
- if (versionCheck != 0x0100) err = -1;
- if (err == noErr) {
- err = CallSelectorFunctionProc(ourGestaltUPP, kGestaltGetInitGlobals, (long *)&gInitGlobals);
- }
- }
- if (err != noErr) {
- gInitGlobals = 0;
- } else {
- // if our INIT portion loaded, make sure our prefs resource matches its settings.
- **gPrefsResource = *gInitGlobals;
- }
- GetDialogItem(CPDialog, numItems + kJivingOn, &kind, (Handle *) &gOnButton, &r);
- GetDialogItem(CPDialog, numItems + kJivingOff, &kind, (Handle *) &gOffButton, &r);
- GetDialogItem(CPDialog, numItems + kJivText, &kind, &gTextBox, &r);
- BlockMove((**gPrefsResource).JivString, text, sizeof((**gPrefsResource).JivString));
- SetDialogItemText(gTextBox, text);
- SelectDialogItemText(CPDialog, numItems + kJivText, 0, text[0]);
- cdevValue = 237; // any positive number should do.
- goto updateButtons;
- }
- } else if (cdevValue == 237) { // handle non-initDev messages only if initialization succeeded.
- switch (message) {
- case closeDev:
- ChangedResource((Handle) gPrefsResource);
- break;
- case hitDev:
- Item -= numItems;
- if (Item == kJivingOn || Item == kJivingOff) {
- (**gPrefsResource).JiverOn = (Item == kJivingOn);
- updateButtons: SetControlValue(gOnButton, (**gPrefsResource).JiverOn);
- SetControlValue(gOffButton, !(**gPrefsResource).JiverOn);
- }
- break;
- case nulDev:
- // for some stupid reason, we never get notified when our user types new text
- // into our text area. So we have to wait until null events come by, and
- // check the area at that time. Here, all we do is
- GetDialogItemText(gTextBox, text);
- if (text[0] > 31) text[0] = 31;
- BlockMove(text, (**gPrefsResource).JivString, sizeof((**gPrefsResource).JivString));
- if (gInitGlobals) {
- *gInitGlobals = **gPrefsResource;
- }
- break;
- } // switch (message)
- }
-
- SetA4(oldA4);
- return cdevValue;
- }
-